import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
// 移除已弃用的 window 导入，代码中实际使用 WidgetsBinding.instance.platformDispatcher 获取视图信息
// 原导入语句已无必要，故移除

class ScreenUtil {
  /// 默认设计稿尺寸（单位 dp 或 pt）
  static double _designWidth = 375.0;
  static double _designHeight = 667.0;
  static bool _allowFontScaling = false;

  /// 配置设计稿尺寸（屏幕宽、高、密度）
  /// 
  /// [width] 设计稿宽度
  /// [height] 设计稿高度
  /// [allowFontScaling] 是否允许字体缩放
  static void setDesignSize(double width, double height, {
    bool allowFontScaling = false,
  }) {
    _designWidth = width;
    _designHeight = height;
    _allowFontScaling = allowFontScaling;
  }

  static MediaQueryData get _mediaQuery => MediaQueryData.fromView(WidgetsBinding.instance.platformDispatcher.views.first);

  /// 设备宽度
  static double get screenWidth => _mediaQuery.size.width;

  /// 设备高度
  static double get screenHeight => _mediaQuery.size.height;

  /// 设备像素密度
  static double get devicePixelRatio => _mediaQuery.devicePixelRatio;

  /// 系统字体缩放比例
  static double get textScaleFactor => _mediaQuery.textScaler.scale(1.0);

  /// 导航栏高度（状态栏+AppBar）
  static double get navigationBarHeight => 
      _mediaQuery.padding.top + kToolbarHeight;

  /// 顶部安全区域高度
  static double get topSafeHeight => _mediaQuery.padding.top;

  /// 底部安全区域高度
  static double get bottomSafeHeight => _mediaQuery.padding.bottom;

  /// 更新状态栏样式
  static void updateStatusBarStyle(SystemUiOverlayStyle style) {
    SystemChrome.setSystemUIOverlayStyle(style);
  }

  /// 宽度缩放比例
  static double get widthScale => screenWidth / _designWidth;

  /// 高度缩放比例
  static double get heightScale => screenHeight / _designHeight;

  /// 根据设计稿的宽度适配实际宽度
  static double setWidth(double width) {
    return width * widthScale;
  }

  /// 根据设计稿的高度适配实际高度
  static double setHeight(double height) {
    return height;
  }

  /// 字体大小适配方法
  /// 
  /// [fontSize] 设计稿上字体的大小，单位px
  static num setSp(num fontSize) {
    return _allowFontScaling
        ? (fontSize * widthScale)
        : ((fontSize * widthScale) / textScaleFactor);
  }
}
